/**
 * //输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
 * //
 * // 序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。
 * //
 * //
 * //
 * // 示例 1：
 * //
 * // 输入：target = 9
 * //输出：[[2,3,4],[4,5]]
 * //
 * //
 * // 示例 2：
 * //
 * // 输入：target = 15
 * //输出：[[1,2,3,4,5],[4,5,6],[7,8]]
 * //
 * //
 * //
 * //
 * // 限制：
 * //
 * //
 * // 1 <= target <= 10^5
 * //
 * //
 * //
 * //
 * // Related Topics 数学 双指针 枚举 👍 481 👎 0
 */

package com.xixi.basicAlgroithms.dualPointer;

import java.util.ArrayList;
import java.util.List;

public class ID_Offer_57_II_HeWeiSdeLianXuZhengShuXuLieLcof {
    public static void main(String[] args) {
        Solution solution = new ID_Offer_57_II_HeWeiSdeLianXuZhengShuXuLieLcof().new Solution();
    }


    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int[][] findContinuousSequence(int target) {
            if (target < 3) return new int[0][];
            List<int[]> resultList = new ArrayList<>();


            int i = 1;
            int j = 2;
            int sum = 3;

            while (j <= (target / 2 + 1)) {

                if (sum == target) {
                    int a = 0;
                    int[] comb = new int[j - i + 1];
                    while ((i + a) <= j) {
                        comb[a] = i + a;
                        a++;
                    }
                    resultList.add(comb);
                    sum += ++j;
                } else if (sum < target) {
                    sum += ++j;
                } else {
                    sum -= i;
                    i++;
                }
            }


            int[][] result = new int[resultList.size()][];
            for (int z = 0; z < resultList.size(); z++) {
                result[z] = resultList.get(z);
            }

            return result;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)


}